package com.fanx.learning.service.impl;

import com.fanx.base.model.RestResponse;
import com.fanx.content.model.po.CoursePublish;
import com.fanx.learning.feignclient.ContentServiceClient;
import com.fanx.learning.feignclient.MediaServiceClient;
import com.fanx.learning.model.dto.XcCourseTablesDto;
import com.fanx.learning.service.LearningService;
import com.fanx.learning.service.MyCourseTablesService;
import org.apache.commons.lang.StringUtils;

import javax.annotation.Resource;

/**
 * 在线学习接口实现
 */
public class LearningServiceImpl implements LearningService {

    @Resource
    MyCourseTablesService myCourseTablesService;

    @Resource
    ContentServiceClient contentServiceClient;

    @Resource
    MediaServiceClient mediaServiceClient;

    @Override
    public RestResponse<String> getVideo(String userId, Long courseId, Long teachplanId, String mediaId) {
        //查询课程信息
        CoursePublish coursepublish = contentServiceClient.getCoursepublish(courseId);
        //判断是否为null不再继续
        if (coursepublish==null) {
            return RestResponse.validfail("课程不存在");
        }
        //远程调用内容管理服务根据课程计划id（teachplanId)去查询课程计划信息，如果is_preview的值为1标识支持试学
        //也可以从coursepublish对象中解析出课程信息去判断是否支持试学
        //todo： 如果支持试学调用媒资服务查询视频播放地址，返回播放地址

        //判断用户是否登录
        //用户已登录
        if (StringUtils.isNotEmpty(userId)){
            //获取学习资格
            XcCourseTablesDto learningStatus = myCourseTablesService.getLearningStatus(userId, courseId);
            String learnStatus = learningStatus.getLearnStatus();
            //学习资格
            if (learnStatus.equals("702002")){
                return RestResponse.validfail("无法学习，因为没有选课或选课后没有支付");
            }else if (learningStatus.equals("702003")){
                return RestResponse.validfail("已过期需要申请续期或者重新支付");
            }else {
                //有资格学习,返回视频播放地址
                // 远程调用媒资获取视频播放地址
                return mediaServiceClient.getPlayUrlByMediaId(mediaId);
            }

        }
        //如果用户没有登录
        //取出课程的收费规则
        String charge = coursepublish.getCharge();
        if (charge.equals("201000")){
            //有资格学习，返回视频播放地址
            //远程调用媒资获取视频播放地址
            return mediaServiceClient.getPlayUrlByMediaId(mediaId);
        }

        return RestResponse.validfail("给课程没有选课");
    }
}
